/**
 * zTree模糊搜索
 * @param treeId zTree的id
 * @param keyword 搜索的关键词
 * @param notExpandFirstLevel 删除关键词时是否默认展开树的第一层
 */
function searchTree(treeId, keyword, notExpandFirstLevel) {
    var tree = $.fn.zTree.getZTreeObj(treeId);
    var allTreeNodes = tree.transformToArray(tree.getNodes());
    tree.hideNodes(allTreeNodes);
    var showNodes = tree.getNodesByParamFuzzy("name", $.trim(keyword), null);
    var parentNodes = [];
    var getParentNodes = function(curNode) {
        var pNodes = [];
        if (curNode.getParentNode()) {
            pNodes.push(curNode.getParentNode());
            return pNodes.concat(getParentNodes(curNode.getParentNode()));
        } else {
            return pNodes;
        }
    }
    for (var i = 0; i < showNodes.length; i++) {
        parentNodes = parentNodes.concat(getParentNodes(showNodes[i]));
    }
    showNodes = showNodes.concat(parentNodes);
    tree.showNodes(showNodes);
    // 搜索到的匹配的节点可能不是根节点，所以搜索结果展开，因为用户可能非常多，所以显示全部结果时仅展开第一层
    if (!!$.trim(keyword)) {
        // 由于zTree收起展开使用了jQuery的动画，但没有考虑到异步的问题，没有提供回调，所以会出现问题
        // 解决方案：先关闭动画，收缩完成后再恢复
        tree.setting.view.expandSpeed = "";
        tree.expandAll(true);
        tree.setting.view.expandSpeed = "fast";
    } else {
        if (!notExpandFirstLevel) {
            var rootNodes = tree.getNodes();
            $.each(allTreeNodes, function(index) {
                tree.expandNode(allTreeNodes[index], rootNodes.indexOf(allTreeNodes[index]) > -1);
            });
        } else {
            // 由于zTree收起展开使用了jQuery的动画，但没有考虑到异步的问题，没有提供回调，所以会出现问题
            // 解决方案：先关闭动画，收缩完成后再恢复
            tree.setting.view.expandSpeed = "";
            tree.expandAll(false);
            tree.setting.view.expandSpeed = "fast";
        }
    }
}